package com.fsl.springbootdesignpattern.g_template;

/**
 * @author sj2
 * 模板方法就是提前定义好一个模板的操作抽象类
 * 所有执行这个操作的类都继承这个模板类
 * 每一个自定义的类当中，实现自己的模板方法
 * 优点： 1、封装不变部分，扩展可变部分。 2、提取公共代码，便于维护。 3、行为由父类控制，子类实现。
 * 缺点：每一个不同的实现都需要一个子类来实现，导致类的个数增加，使得系统更加庞大。
 * 使用场景： 1、有多个子类共有的方法，且逻辑相同。 2、重要的、复杂的方法，可以考虑作为模板方法。
 * 注意事项：为防止恶意操作，一般模板方法都加上 final 关键词。
 */
public abstract class Game {

    abstract void initialize();
    abstract void startPlay();
    abstract void endPlay();

    /**
     * 模板方法设置为final的
     */
    public final void play(){
        initialize();
        startPlay();
        endPlay();
    }
}
